package com.admin.business.workManagement.venusOaWork;

import com.tiangong.framework.annotation.OpenApi;
import com.tiangong.framework.bo.CDO;
import com.tiangong.framework.bo.Return;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;

/**
 * @description: 工作安排表
 * @create: 2023-11-13 16:33:38
 **/
@Service("venusOaWorkService")
@Slf4j
public class VenusOaWorkService{

    @Resource
    VenusOaWorkDao venusOaWorkDao;

    /**
     * 添加工作安排表,获取id数据
     *
     * @param cdoRequest - id:主键
     *                   - org_id:公司id
     *                   - project_id:项目id
     *                   - work_position_org_id:工作位置 公司id
     *                   - work_position_project_id:工作位置 项目id
     *                   - work_position_text:工作位置
     *                   - user_id:用户id
     *                   - work_name:工作名称
     *                   - timeNumber:指定的时间
     *                   - timeType2:指定的时间单位(1.分钟2.小时3.天4.月)
     *                   - work_start_time:工作开始时间
     *                   - work_end_time:工作结束时间
     *                   - work_chooseperson_dept_id:选择工作人员 部门id
     *                   - work_chooseperson_post_id:选择工作人员 岗位id
     *                   - work_chooseperson_employee_id:选择工作人员 员工id
     *                   - work_content:工作内容
     *                   - work_images:工作上传图片
     *                   - work_state:工作状态(0.待完成1.改派2.已完成3.超时完成4.拒绝任务5.取消任务)
     *                   - work_approval_type:审核类型(0.正常1.修改时间审核2.拒绝安排审核)
     *                   - work_refuse_person:拒绝人
     *                   - work_refuse_time:拒绝时间
     *                   - work_refuse_reason:拒绝原因
     *                   - work_updatetime_person:修改人
     *                   - work_updatetime_starttime:修改时间(开始)
     *                   - work_updatetime_endtime:修改时间(结束)
     *                   - work_updatetime_reason:修改原因
     *                   - work_cancel_person:取消人
     *                   - work_cancel_time:取消时间
     *                   - work_cancel_reason:取消原因
     *                   - work_end_person:结束人
     *                   - work_end_times:结束时间
     *                   - work_end_reason:结束原因
     *                   - work_complete_person:完成人
     *                   - work_complete_time:完成时间
     *                   - work_complete_content:完成内容
     *                   - work_complete_images:完成图片凭证
     *                   - work_complete_publicity:完成是否公示(0.否1.是)
     *                   - instructions:发布人批示
     *                   - instructions_time:批示时间
     *                   - punishment:是否处罚(0 未处罚 1 处罚 2超时完成处罚 3 拒绝任务处罚 4取消任务处罚 5改派任务处罚)
     *                   - punishment_reason:处罚原因
     *                   - punishment_image:处罚图片
     *                   - punishment_time:处罚时间
     *                   - update_time:更新时间
     *                   - state:是否删除：0、正常，1、已删除；
     *                   - begin_time:创建时间
     * @return
     * @author wdf
     * @create: 2023-11-13 16:33:38
     */
    @OpenApi
    public Return addVenusOaWork(CDO cdoRequest) {
        venusOaWorkDao.addVenusOaWork(cdoRequest);
        CDO cdoResult = new CDO();
        if (cdoRequest.containsKey("id")) {
            cdoResult.set("id", cdoRequest.get("id"));
        }
        return Return.valueOf(cdoResult);
    }

    /**
     * 根据id，更新工作安排表数据
     *
     * @param cdoRequest - id:主键
     *                   - org_id:公司id
     *                   - project_id:项目id
     *                   - work_position_org_id:工作位置 公司id
     *                   - work_position_project_id:工作位置 项目id
     *                   - work_position_text:工作位置
     *                   - user_id:用户id
     *                   - work_name:工作名称
     *                   - timeNumber:指定的时间
     *                   - timeType2:指定的时间单位(1.分钟2.小时3.天4.月)
     *                   - work_start_time:工作开始时间
     *                   - work_end_time:工作结束时间
     *                   - work_chooseperson_dept_id:选择工作人员 部门id
     *                   - work_chooseperson_post_id:选择工作人员 岗位id
     *                   - work_chooseperson_employee_id:选择工作人员 员工id
     *                   - work_content:工作内容
     *                   - work_images:工作上传图片
     *                   - work_state:工作状态(0.待完成1.改派2.已完成3.超时完成4.拒绝任务5.取消任务)
     *                   - work_approval_type:审核类型(0.正常1.修改时间审核2.拒绝安排审核)
     *                   - work_refuse_person:拒绝人
     *                   - work_refuse_time:拒绝时间
     *                   - work_refuse_reason:拒绝原因
     *                   - work_updatetime_person:修改人
     *                   - work_updatetime_starttime:修改时间(开始)
     *                   - work_updatetime_endtime:修改时间(结束)
     *                   - work_updatetime_reason:修改原因
     *                   - work_cancel_person:取消人
     *                   - work_cancel_time:取消时间
     *                   - work_cancel_reason:取消原因
     *                   - work_end_person:结束人
     *                   - work_end_times:结束时间
     *                   - work_end_reason:结束原因
     *                   - work_complete_person:完成人
     *                   - work_complete_time:完成时间
     *                   - work_complete_content:完成内容
     *                   - work_complete_images:完成图片凭证
     *                   - work_complete_publicity:完成是否公示(0.否1.是)
     *                   - instructions:发布人批示
     *                   - instructions_time:批示时间
     *                   - punishment:是否处罚(0 未处罚 1 处罚 2超时完成处罚 3 拒绝任务处罚 4取消任务处罚 5改派任务处罚)
     *                   - punishment_reason:处罚原因
     *                   - punishment_image:处罚图片
     *                   - punishment_time:处罚时间
     *                   - update_time:更新时间
     *                   - state:是否删除：0、正常，1、已删除；
     *                   - begin_time:创建时间
     * @return
     * @author wdf
     * @create: 2023-11-13 16:33:38
     */
    @OpenApi
    public Return updateVenusOaWorkById(CDO cdoRequest) {
        venusOaWorkDao.updateVenusOaWorkById(cdoRequest);
        return Return.SUCCESS;
    }

    /**
     * 根据id，删除工作安排表数据
     *
     * @param cdoRequest - id:主键
     * @return
     * @author wdf
     * @create: 2023-11-13 16:33:38
     */
    @OpenApi
    public Return deleteVenusOaWorkById(CDO cdoRequest){
        int count = venusOaWorkDao.deleteVenusOaWorkById(cdoRequest.getLong("id"));
        CDO cdoResult = new CDO();
        cdoResult.set("count", count);
        return Return.valueOf(cdoResult);
    }

    /**
     * 根据条件，删除工作安排表数据
     *
     * @param cdoRequest
     * @return
     * @author wdf
     * @create: 2023-11-13 16:33:38
     */
    @OpenApi
    public Return deleteVenusOaWork(CDO cdoRequest) {
        int count = venusOaWorkDao.deleteVenusOaWork(cdoRequest);
        CDO cdoResult = new CDO();
        cdoResult.set("count", count);
        return Return.valueOf(cdoResult);
    }

    /**
     * 根据ID，获取工作安排表数据
     *
     * @param cdoRequest - id:主键
     * @return
     * @author wdf
     * @create: 2023-11-13 16:33:38
     */
    @OpenApi
    public Return getVenusOaWorkById(CDO cdoRequest) {
        CDO cdoMapperResult = venusOaWorkDao.getVenusOaWorkById(cdoRequest.getLong("id"));
        return Return.valueOf(cdoMapperResult);
    }

    /**
     * 根据非空条件，获取工作安排表数据列表
     *
     * @param cdoRequest
     * @return
     * @author wdf
     * @create: 2023-11-13 16:33:38
     */
    @OpenApi
    public Return getVenusOaWorkListPage(CDO cdoRequest) {
        Integer pageIndex = cdoRequest.getInteger("pageIndex")-1;
        int recordSize = 10;
        cdoRequest.set("recordFrom", pageIndex * recordSize);
        cdoRequest.set("recordSize", recordSize);
        List<CDO> cdoMapperResultList = venusOaWorkDao.getVenusOaWorkListPage(cdoRequest);
        boolean isEndPage = false;
        if (cdoMapperResultList.size() < recordSize) {
            isEndPage = true;
        }
        CDO cdoResult = new CDO();
        cdoResult.set("isEndPage", isEndPage);
        cdoResult.set("datalist", cdoMapperResultList);
//        int total = venusOaWorkDao.getVenusOaWorkCount(cdoRequest);
//        cdoResult.set("total", total);
        return Return.valueOf(cdoResult);
    }
    /**
     * 根据混合条件，获取工作安排表数据列表
     *
     * @param cdoRequest - id:主键
     * @return
     * @author wdf
     * @create: 2023-11-13 16:33:38
     */
    @OpenApi
    public Return getVenusOaWorkListPageByCondition(CDO cdoRequest) {
        Integer pageIndex = cdoRequest.getInteger("pageIndex")-1;
        int recordSize = 10;
        cdoRequest.set("recordFrom", pageIndex * recordSize);
        cdoRequest.set("recordSize", recordSize);
        List<CDO> cdoMapperResultList = venusOaWorkDao.getVenusOaWorkListPageByCondition(cdoRequest);
        boolean isEndPage = false;
        if (cdoMapperResultList.size() < recordSize) {
            isEndPage = true;
        }
        CDO cdoResult = new CDO();
        cdoResult.set("isEndPage", isEndPage);
        cdoResult.set("datalist", cdoMapperResultList);
//        int total = venusOaWorkDao.getVenusOaWorkCount(cdoRequest);
//        cdoResult.set("total", total);
        return Return.valueOf(cdoResult);
    }
}
